package com.xiaoxiong.text;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.xiaoxiong.adapter.LeftRightListAdapter;
import com.xiaoxiong.bean.BaseLeftRightData;
import com.xiaoxiong.database.OperateFormPersonalInfo;
/**
 * 
 * @ClassName: PersonInfoActivity 
 * @Description: 个人信息页面
 * @author xiaoxiong
 * @date 2016年5月4日 上午1:26:20 
 *
 */
public class PersonInfoActivity extends Activity {

	/**
	 * 登录按钮
	 */
	private Button mButton;
	/**
	 * 显示个人信息的列表
	 */
	private ListView mListView;
	/**
	 * 临时保存个人信息
	 */
	private List<BaseLeftRightData> PersonInfoDatas;
	/**
	 * ListView用到的适配器
	 */
	private LeftRightListAdapter leftRightListAdapter;
	/**
	 * 保存数据用的
	 */
	private SharedPreferences nb_school_message;
	/**
	 * 加载中对话框
	 */
	private LoadingDialog mDialog;
	/**
	 * 用户名
	 */
	private String username;
	/**
	 * 密码
	 */
	private String password;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initData();
	}

	/**
	 * 
	* @Title: initData 
	* @Description: 初始化数据
	* @param 
	* @return void
	* @throws
	 */
	private void initData() {

		/**
		 * 这个是保存数据用到的
		 */
		nb_school_message = this.getSharedPreferences("test",
				Context.MODE_PRIVATE);

		mButton = (Button) findViewById(R.id.button);
		mListView = (ListView) findViewById(R.id.list_show);
		
		PersonInfoDatas = new ArrayList<BaseLeftRightData>();
		//创建adapter
		leftRightListAdapter = new LeftRightListAdapter(this, PersonInfoDatas);
		//为listview设置adapter
		mListView.setAdapter(leftRightListAdapter);
		
		mButton.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				login();
			}
		});
	}
	
	/**
	 * 
	* @Title: login 
	* @Description: 登录
	* @param 
	* @return void
	* @throws
	 */
	private void login(){

		/**
		 * 测试时这两个要填上你的学号和密码
		 */
		username = "你的学号";
		password = "你的密码";
		
		mDialog = new LoadingDialog(this);
		mDialog.setCancel(false);
		mDialog.show();

		/**
		 * 这个是先登录去获取各种信息
		 */
		new LoginServer(this, loginHandler, nb_school_message, username,
				password).doLogin();
	}

	/**
	 * 登录返回的handler
	 */
	@SuppressLint("HandlerLeak")
	private Handler loginHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);

			Bundle bundle = msg.getData();
			boolean isLogin = bundle.getBoolean("isSuccess");
			if (isLogin) {
				Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show();
				//获取个人信息
				new GetPersonInfo(getApplicationContext(), mHandler).Post();
			} else {
				Toast.makeText(getApplicationContext(), "请求失败，请检测你的网络", Toast.LENGTH_SHORT)
						.show();
				if(mDialog != null && mDialog.isShowing()){
					mDialog.dismiss();
				}
			}
		}
	};

	/**
	 * 这个是获取所有课程信息，你要自己写对应的获取那两个功能的信息的类
	 */
//	new GetAllCourse(getApplicationContext(), mHandler).Post();
	
	
	// 登录返回的handler
	@SuppressLint("HandlerLeak")
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);

			Bundle bundle = msg.getData();
			/**
			 * 这个是你爬下来的网页
			 */
			String value = bundle.getString("Value");
			Log.d("value", value);
			/**
			 * 这个是说明你爬取数据成功还是失败的标志
			 */
			boolean isLogin = bundle.getBoolean("isSuccess");
			if (isLogin) {
				/**
				 * 成功则在这里处理，为了方便我直接写在这里，建议你新建一个java类，传value进去处理比较好
				 */
				//处理个人信息
				new DealPersonInfo(getApplicationContext(), value).StartDeal();
				//获取本地数据库保存着的个人信息
				GetInfo();
//				Log.d("personinfo", value);
				
				/**
				 * 把value封装成Document对象
				 */
//				Document doc = Jsoup.parse(value);
				/**
				 * 通过class名，你爬下来的是一个网页，里面肯定有css，肯定有类名
				 * 所以通过类名分离数据，不一定是根据类名，可能要根据标签、其他标志等
				 * Document对象有提供好几种方法，这个要你自己根据网页的代码去分析使用那种方法最好
				 * 我这里用根据类名，因为我发现课程信息这个网页通过用类名分离数据，可以完全过滤掉其他所有没用的信息
				 */
//				Elements element = doc.getElementsByTag("table");
//				StringBuilder sb3 = new StringBuilder();
//				int flag = 0;
//				/**
//				 * 下面是分离好的信息，你可以通过这种方法遍历，看看分离好的信息是什么
//				 */
//				for (Element links : element) {
//					String title = links.text();
//					sb3.append(title);
//					sb3.append("\n");
//					/**
//					 * 以下几行是我知道分离好的信息是什么，进而把数据集中分类用到的，你写的时候一开始不能写这个，要根据具体数据去分析
//					 */
//					flag++;
//					if (flag == 5) {
//						flag = 0;
//						sb3.append("\n");
//					} else {
//						sb3.append("-");
//					}
//					/**
//					 * 结束
//					 */
//				}
				/**
				 * 这个是把数据打印在控制台，测试时用的
				 */
//				Log.d("value", sb3.toString());
				/**
				 * 这个是显示在app上，一开始测试时可以用，当确认数据获取正确，就自己写界面，将数据显示在界面上
				 */
//				tv.setText(sb3);

			} else {
				Toast.makeText(getApplicationContext(), "请求失败，请检测你的网络", 0)
						.show();
			}
			if(mDialog != null && mDialog.isShowing()){
				mDialog.dismiss();
			}
		}
	};
	

	/**
	 * 
	* @Title: GetInfo 
	* @Description: 从数据库拿取个人信息
	* @param 
	* @return void
	* @throws
	 */
	private void GetInfo() {
		
		PersonInfoDatas.clear();
		OperateFormPersonalInfo ofpi = new OperateFormPersonalInfo(this);
		Cursor personinfos = ofpi.queryPersonalInfo();
		while (personinfos.moveToNext()) {
			BaseLeftRightData PersonInfoData = new BaseLeftRightData(
					personinfos.getString(personinfos.getColumnIndex("title")),
					personinfos.getString(personinfos.getColumnIndex("info")));
			PersonInfoDatas.add(PersonInfoData);
		}
		//更新listview上的数据
		leftRightListAdapter.notifyDataSetChanged();
	}
	
}
